package cn.b.sky.mes.mm.dao;

import java.util.List;
import java.util.Map;
import java.util.Set;

import cn.b.sky.mes.mm.model.Requirement;
import org.apache.ibatis.annotations.Param;

import cn.b.sky.mes.mm.model.condition.RequirementCondition;

/**
 * 
 * <strong>Title : RequirementDao.java<br></strong>
 * <strong>Package : cn.b.sky.mes.mm.dao<br></strong>
 * <strong>Description : </strong>物料需求数据接口<br> 
 * <strong>Create on : 2016年9月13日 上午11:33:32<br></strong>
 * <p>
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人|修改日期|修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface RequirementDao {

  /**
   * 
   * <strong>Title : insertRequirement<br></strong>
   * <strong>Description : </strong>新增物料需求<br> 
   * <strong>Create on : 2016年9月13日 下午2:44:37<br></strong>
   * <p>
   * @param requirement
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertRequirement(Requirement requirement);

  /**
   * 
   * <strong>Title : getRequirementBySafetyinventroy<br></strong>
   * <strong>Description : </strong>查询物料需求台账中 配送需求触发策略为：安全库存的需求<br> 
   * <strong>Create on : 2016-9-14 下午2:29:21<br></strong>
   * <p>
   * @param distributionTriggerModeCode 安全库存编号
   * @return
   * List<Requirement>
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Requirement> getRequirementBySafetyinventroy(@Param("siteCode") String siteCode,
      @Param("distributionTriggerModeCode") String distributionTriggerModeCode,
      @Param("statusECode") String statusECode);

  /**
   * 
   * <strong>Title : getHistoryRequirementCount<br></strong>
   * <strong>Description : </strong>获取物料历史需求数量（相同线边库及库位）<br> 
   * <strong>Create on : 2016年9月18日 下午2:25:23<br></strong>
   * <p>
   * @param requirement
   * @return
   * double
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  double getHistoryRequirementCount(Requirement requirement);

  /**
   * 
   * <strong>Title : updateRequirement<br></strong>
   * <strong>Description : </strong>修改需求单已配送数量<br> 
   * <strong>Create on : 2016-9-20 下午3:05:59<br></strong>
   * <p>
   * @param requirement
   * void
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateRequirementDistributionquantity(@Param("siteCode") String siteCode,
      @Param("requirementNum") String requirementNum, @Param("distributionQuantity") Double distributionQuantity);

  /**
   * 
   * <strong>Title : getRequirementsCount<br></strong>
   * <strong>Description : </strong>统计需求各状态的数量<br> 
   * <strong>Create on : 2016年9月22日 上午10:17:57<br></strong>
   * <p>
   * @param condition
   * @return
   * Set<Map<String,Object>>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Set<Map<String, Object>> getRequirementsCount(RequirementCondition condition);

  /**
   * 
   * <strong>Title : getOvertimeRequirementsByCondition<br></strong>
   * <strong>Description : </strong>获取配送超时的需求<br> 
   * <strong>Create on : 2016年9月22日 下午3:48:35<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Requirement>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Requirement> getOvertimeRequirementsByCondition(RequirementCondition condition);

  /**
   * 
   * <strong>Title : getOvertimeRequirementCount<br></strong>
   * <strong>Description : </strong>统计超时的需求数量<br> 
   * <strong>Create on : 2016年9月22日 上午10:21:38<br></strong>
   * <p>
   * @param condition
   * @return
   * Integer
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Integer getOvertimeRequirementCount(RequirementCondition condition);

  /**
   * 
   * <strong>Title : getRequirementsByCondition<br></strong>
   * <strong>Description : </strong>分页查询需求<br> 
   * <strong>Create on : 2016年9月22日 下午3:06:47<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Requirement>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Requirement> getRequirementsByCondition(RequirementCondition condition);

  /**
   * 
   * <strong>Title : getRequirementCountByCondition<br></strong>
   * <strong>Description : </strong>查询需求总数<br> 
   * <strong>Create on : 2016年9月22日 下午3:07:15<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int getRequirementCountByCondition(RequirementCondition condition);
  /**
   * 
   * <strong>Title : selectRequirementListByCondition<br></strong>
   * <strong>Description : </strong>根据条件查询物料台账需求<br> 
   * <strong>Create on : 2016-9-23 下午6:53:54<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Requirement>
   * @throws 
   * @author ZhiPeng.Tong<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Requirement> selectRequirementListByCondition (RequirementCondition condition);
  /**
   * 
   * <strong>Title : selectRequirementCountByCondition<br></strong>
   * <strong>Description : </strong>物料需求台账记录<br> 
   * <strong>Create on : 2016-9-23 下午6:55:10<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author ZhiPeng.Tong<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectRequirementCountByCondition (RequirementCondition condition);
/**
 * 
 * <strong>Title : getRequirement<br></strong>
 * <strong>Description : </strong>根据条件查询物料台账需求<br> 
 * <strong>Create on : 2016-9-23 下午6:56:30<br></strong>
 * <p>
 * @param siteCode
 * @param requirementNum
 * @return
 * Requirement
 * @throws 
 * @author ZhiPeng.Tong<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人 | 修改日期 | 修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
  Requirement getRequirement(@Param("siteCode") String siteCode, @Param("requirementNum")String requirementNum);
  /**
   * 
   * <strong>Title : selectProductOrdersByProductOrderNum<br></strong>
   * <strong>Description : </strong>获取物料需求详情<br> 
   * <strong>Create on : 2016-9-26 上午10:59:15<br></strong>
   * <p>
   * @param siteCode
   * @param requirementNum
   * @return
   * List<Requirement>
   * @throws 
   * @author ZhiPeng.Tong<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
 public List<Requirement> selectRequirement(@Param("siteCode")  String siteCode,
		 @Param("requirementNum")String requirementNum);
/**
 * 
 * <strong>Title : cancelStatusECode<br></strong>
 * <strong>Description : </strong>取消物料需求<br> 
 * <strong>Create on : 2016-9-26 下午2:00:39<br></strong>
 * <p>
 * @param requirementNum
 * @param siteCode
 * @return
 * Object
 * @throws 
 * @author ZhiPeng.Tong<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人 | 修改日期 | 修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */

void updateCancelStatusECode(Requirement requirement);

}
